package com.cmc.cloud.cmclink.doc.service.si;

import java.util.Collection;
import java.util.List;

import javax.validation.Valid;

import com.cmc.cloud.cmclink.doc.entity.BlnoScnDO;
import com.cmc.cloud.cmclink.doc.vo.blnoscnvo.BlnoScnCreateReqVO;
import com.cmc.cloud.cmclink.doc.vo.blnoscnvo.BlnoScnPageReqVO;
import com.cmc.cloud.cmclink.doc.vo.blnoscnvo.BlnoScnUpdateReqVO;
import com.cmc.cloud.cmclink.doc.vo.blnoscnvo.LinkCpfCodeReqVO;
import com.cmes.framework.common.pojo.PageResult;

/**
 * 提单收发通信息 Service 接口
 *
 * @author 集运管理员
 */
public interface BlnoScnService {

    /**
     * 创建提单收发通信息
     *
     * @param createReqVO 创建信息
     */
    void createBlnoScn(@Valid BlnoScnCreateReqVO createReqVO);

    /**
     * 更新提单收发通信息
     *
     * @param updateReqVO 更新信息
     */
    void updateBlnoScn(@Valid BlnoScnUpdateReqVO updateReqVO);

    /**
     * 删除提单收发通信息
     *
     * @param id 编号
     */
    void deleteBlnoScn(Long id);

    /**
     * 删除提单blnoId收发通信息
     *
     * @param blnoId 编号
     */
    void deleteBlnoScnByblnoId(Long blnoId);

    /**
     * 通过提单号 获取收发通信息
     *
     * @param blNo 提单号
     * @return 收发通信息列表
     */
    List<BlnoScnDO> getScnByBlNo(String blNo);

    /**
     * 获得提单收发通信息
     *
     * @param id 编号
     * @return 提单收发通信息
     */
    BlnoScnDO getBlnoScn(Long id);

    /**
     * 获得提单收发通信息列表
     *
     * @param blnoId blnoId
     * @return 获得提单收发通信息列表
     */
    List<BlnoScnDO> getBlnoScnByBlnoId(Long blnoId);

    /**
     * 获得提单收发通信息列表
     *
     * @param ids ids
     * @return 获得提单收发通信息列表
     */
    List<BlnoScnDO> getBlnoScnByBlnoIdList(Collection<Long> ids);

    /**
     * 获得提单收发通信息列表
     *
     * @param ids 编号
     * @return 提单收发通信息列表
     */
    List<BlnoScnDO> getBlnoScnList(Collection<Long> ids);

    /**
     * 获得提单收发通信息分页
     *
     * @param pageReqVO 分页查询
     * @return 提单收发通信息分页
     */
    PageResult<BlnoScnDO> getBlnoScnPage(BlnoScnPageReqVO pageReqVO);

    /**
     * 创建 修改 删除 SI 收发通信息
     *
     * @param blnoId
     * @param newList 修改
     * @param oldList 原信息
     */
    void createOrUpdateAndDeleteBatch(Long blnoId, List<BlnoScnUpdateReqVO> newList, List<BlnoScnUpdateReqVO> oldList);

    /**
     * 给提单绑定cpfCode
     *
     * @param linkCpfCodeReqVO
     * @return String
     */
    String bindCpfCode(LinkCpfCodeReqVO linkCpfCodeReqVO);

}
